﻿Imports Clases
Public Class frmHacerPedidos
    Dim cboProd As New List(Of Control)
    Dim txtCant As New List(Of Control)
    Dim btnElim As New List(Of Control)
    Dim y As Integer = 10
    Dim xProd As Integer = 20
    Dim xCant As Integer
    Dim contadorBotones As Integer = 0
    Dim sumaTotal As Decimal

    ''' <summary>
    ''' Botón para generar nuevos productos, cantidad y precio
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnMas_Click(sender As System.Object, e As System.EventArgs) Handles btnMas.Click
        If ProductName.Count > 0 Then
            cargarCombos()
        Else
            MessageBox.Show("No hay productos", "Hacer pedido")
        End If
    End Sub

    ''' <summary>
    ''' Cargamos un cbo con los producto, txt para la cantidad y btn para eliminar cuando iniciemos el formulario
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub HacerPedido_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        variablesIniciadas()
        'Borro los controles de productos
        gbProductos.Controls.Clear()
        cargarCombos()
        btnTerminarPedido.Visible = True
        lblTotal.Visible = True
        lblEuros.Visible = True
    End Sub


    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub cargarCombos()
        'Crear Lista productos

        Dim cboProductos As New ComboBox
        cboProductos.Name = "productos"
        cboProductos.Visible = True
        cboProductos.Size = New Size(121, 30)
        cboProductos.Location = New Point(xProd, y)
        gbProductos.Controls.Add(cboProductos)
        If misProductos.Productos.Count > 0 Then
            For i As Integer = 0 To misProductos.Productos.Count - 1
                cboProductos.Items.Add(misProductos.Productos(i).Nombre)
            Next
        End If
        xCant = xProd + cboProductos.Width + 5
        'Crear txt cantidad
        Dim txtCantidad As New TextBox
        txtCantidad.Name = "cantidad"
        txtCantidad.Visible = True
        txtCantidad.Size = New Size(40, 30)
        txtCantidad.Location = New Point(xCant, y)
        gbProductos.Controls.Add(txtCantidad)
        AddHandler txtCantidad.TextChanged, AddressOf txtCantidad_TextChanged
        ' Crear boton elimiar
        Dim btnElimiar As New Button
        btnElimiar.Name = "eliminar"
        btnElimiar.Text = "Eliminar"
        btnElimiar.Tag = contadorBotones
        btnElimiar.Visible = True
        btnElimiar.Size = New Size(60, 30)
        Dim xBtn As Integer = xCant + txtCantidad.Width + 5
        btnElimiar.Location = New Point(xBtn, y)
        gbProductos.Controls.Add(btnElimiar)

        y += txtCantidad.Height + 10
        AddHandler btnElimiar.Click, AddressOf btnElimiar_Click
        contadorBotones += 1

        cboProd = gbProductos.Controls.Find("productos", False).ToList
        txtCant = gbProductos.Controls.Find("cantidad", False).ToList
        btnElim = gbProductos.Controls.Find("eliminar", False).ToList
    End Sub

    ''' <summary>
    ''' Graba el pedido en el fichero
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnTerminarPedido_Click(sender As System.Object, e As System.EventArgs) Handles btnTerminarPedido.Click
        Dim listaProd As New List(Of ProductoPedido)
        Dim sms As String
        Dim ixProducto As Integer
        For i As Byte = 0 To cboProd.Count - 1
            ixProducto = TryCast(cboProd(i), ComboBox).SelectedIndex
            If ixProducto <> -1 Then
                listaProd.Add(New ProductoPedido(misProductos.Productos(ixProducto).Nombre, misProductos.Productos(ixProducto).Precio, TryCast(txtCant(i), TextBox).Text))
            End If
        Next
        sms = misPedidos.Añadir(New Pedido(usuarioActivo.Nombre, Today, listaProd))
        If sms = "" Then
            gbProductos.Controls.Clear()
            variablesIniciadas()
        Else
            MessageBox.Show(sms)
        End If
    End Sub

    ''' <summary>
    ''' Botón para eliminar productos
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnElimiar_Click(sender As Object, e As EventArgs)
        Dim btn As Button = TryCast(sender, Button)
        Dim index As Integer = Integer.Parse(btn.Tag)
        gbProductos.Controls.Remove(cboProd(index))
        gbProductos.Controls.Remove(txtCant(index))
        gbProductos.Controls.Remove(btnElim(index))
        cboProd.RemoveAt(index)
        txtCant.RemoveAt(index)
        btnElim.RemoveAt(index)
        contadorBotones -= 1
    End Sub
    ''' <summary>
    ''' Limpiar todo
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub variablesIniciadas()
        btnElim.Clear()
        cboProd.Clear()
        txtCant.Clear()
        contadorBotones = 0
        y = 10
        sumaTotal = 0
    End Sub

    ''' <summary>
    ''' Sumar la cantidad total de los productos
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub txtCantidad_TextChanged(sender As Object, e As EventArgs)
        For i As Integer = 0 To cboProd.Count - 1
            If TryCast(txtCant(i), TextBox).Text <> "" AndAlso TryCast(cboProd(i), ComboBox).SelectedIndex <> -1 Then
                sumaTotal += misProductos.Productos(i).Precio * Decimal.Parse(TryCast(txtCant(i), TextBox).Text)
            End If
        Next
        lblEuros.Text = sumaTotal & "€"
    End Sub

End Class